]> git.saurik.com Git - apple/mdnsresponder.git/blob - mDNSMacOSX/Bonjour Safari Extension/SafariExtensionViewController.m
mDNSResponder-1310.60.4.tar.gz
[apple/mdnsresponder.git] / mDNSMacOSX / Bonjour Safari Extension / SafariExtensionViewController.m
1 /*
2 *
3 * Copyright (c) 2017 Apple Inc. All rights reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 #import "SafariExtensionViewController.h"
19 #import "CNDomainBrowserPathUtils.h"
20
21 @interface SafariExtensionViewController ()
22
23 @end
24
25 @implementation SafariExtensionViewController
26
27 + (SafariExtensionViewController *)sharedController {
28 static SafariExtensionViewController *sharedController = nil;
29 static dispatch_once_t onceToken;
30 dispatch_once(&onceToken, ^{
31 sharedController = [[SafariExtensionViewController alloc] init];
32 });
33 return sharedController;
34 }
35
36 - (void)viewWillAppear
37 {
38 [super viewWillAppear];
39 [_domainBrowserView startBrowse];
40 [_mainSplitView adjustSubviews];
41 }
42
43 - (void) viewWillDisappear
44 {
45 [super viewWillDisappear];
46 [_domainBrowserView stopBrowse];
47 }
48
49 #pragma mark - BServiceBrowser Delegates
50
51 - (void)bonjourServiceSelected:(NSString *)service type:(NSString *)type atDomain:(NSString *)domain
52 {
53 (void)service; // unused
54 (void)type; // unused
55 (void)domain; // unused
56 }
57
58 - (void)doubleAction:(NSURL *)url
59 {
60 if (url)
61 {
62 [SFSafariApplication getActiveWindowWithCompletionHandler:^(SFSafariWindow * _Nullable activeWindow) {
63 [activeWindow openTabWithURL: url makeActiveIfPossible: YES completionHandler:^(SFSafariTab * _Nullable tab) {
64 (void)tab; // Unused
65 }];
66 }];
67 [self dismissPopover];
68 }
69 }
70
71 #pragma mark - BonjourBrowser Delegates
72
73 - (void)domainBrowserDomainUpdate:(NSString *)defaultDomain
74 {
75 [_serviceBrowserView newServiceBrowse: DNSDomainToDomainPath(defaultDomain)];
76 if( !_domainBrowserView.selectedDNSDomain.length )
77 {
78 [_mainSplitView setPosition: [_mainSplitView maxPossiblePositionOfDividerAtIndex: 0] ofDividerAtIndex: 0];
79 }
80 else
81 {
82 [_mainSplitView adjustSubviews];
83 [_domainBrowserView showSelectedRow];
84 }
85 }
86
87 - (void)domainBrowserDomainSelected:(NSString *)domain
88 {
89 [_serviceBrowserView newServiceBrowse: DNSDomainToDomainPath(domain)];
90 }
91
92 #pragma mark - SplitView Delegate
93
94 - (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex
95 {
96 (void)splitView; // Unused
97 #define TOP_MIN 40
98 CGFloat pos;
99 CGFloat bottomMinHeight = [_domainBrowserView minimumHeight];
100
101 if( proposedPosition < TOP_MIN )
102 {
103 pos = TOP_MIN;
104 }
105 else if( proposedPosition < [_mainSplitView maxPossiblePositionOfDividerAtIndex: dividerIndex] - bottomMinHeight )
106 {
107 pos = proposedPosition;
108 }
109 else
110 {
111 pos = [_mainSplitView maxPossiblePositionOfDividerAtIndex: dividerIndex] - bottomMinHeight;
112 }
113
114 // Make sure selected rows stay in view
115 [_domainBrowserView showSelectedRow];
116
117 return( pos );
118 }
119
120 - (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex
121 {
122 (void)splitView; // Unused
123 (void)dividerIndex; // Unused
124 return( ![_domainBrowserView foundInstanceInMoreThanLocalDomain] );
125 }
126
127 - (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)view
128 {
129 (void)splitView; // Unused
130 (void)view; // Unused
131 return YES; // Having this override seems to make some non-wanted resizes to not occur
132 }
133
134 @end